/*
 *   ========================================================
 *   Copyright(c) 2012 杭州龙骞科技-版权所有
 *   ========================================================
 *   本软件由杭州龙骞科技所有, 未经书面许可, 任何单位和个人不得以
 *   任何形式复制代码的部分或全部, 并以任何形式传播。
 *   公司网址
 *
 *   			http://www.hzdracom.com/
 *
 *   ========================================================
 */

package com;

import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.text.TextUtils;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.Toast;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.drawable.GlideDrawable;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget;
import com.mylibrary.R;

import java.io.File;
import java.io.FileOutputStream;

/**
 * 项目名称：
 * 包名称：
 * 类描述： 图片加载工具类 by Glide
 * 创建人： zr
 * 创建时间 2017年1月5日15:44:51.
 */
public final class GlideUtil {
    private GlideUtil() {
    }

    /**
     * 加载项目内的图片
     *
     * @param resId 资源id(R.drawable.xxx)
     */
    public static void load(Context context, int resId, ImageView imageView) {
        Glide.with(context.getApplicationContext()).load(resId).into(imageView);
    }

    /**
     * 加载SD卡图片文件
     */
    public static void load(Context context, File file, ImageView imageView) {
        if (null != file && file.isFile() && file.exists()) {
            Glide.with(context.getApplicationContext()).load(file).into(imageView);
        }
    }

    /**
     * 加载网络图片
     */
    public static void load(Context context, String url, ImageView imageView) {
        if (!TextUtils.isEmpty(url)) {
            Glide.with(context.getApplicationContext()).load(url).into(imageView);
        }
    }

    /**
     * 加载网络图片
     */
    public static void loadOrDefault(Context context, String url, ImageView imageView) {
        Glide.with(context.getApplicationContext())
                .load(url)
                .placeholder(R.drawable.default_img)
                .into(imageView);
    }

    /**
     * 加载网络图片
     *
     * @param defaultResId 默认图片
     */
    public static void load(Context context, String url, int defaultResId, ImageView imageView) {
        //测试提出的问题，图片不管压缩或是拉伸变形，要显示全，不能用centerCrop()，会切割图片，imageview设置为fitxy
        Glide.with(context.getApplicationContext()).load(url).asBitmap().placeholder(defaultResId) //设置默认图片
                .error(defaultResId)  //设置加载失败图片
                .into(imageView);
    }

    /**
     * 加载网络图片显示圆形图片
     *
     * @param defaultResId 默认图片
     */
    public static void roundnessload(Context context, String url, int defaultResId, ImageView imageView) {
        Glide.with(context.getApplicationContext()).load(url).transform(new GlideCircleTransform(context.getApplicationContext())).placeholder(defaultResId) //设置默认图片
                .error(defaultResId)  //设置加载失败图片
                .into(imageView);
    }

    /**
     * 加载本地图片显示圆形图片
     */
    public static void roundnesslocalload(Context context, int defaultResId, ImageView imageView) {
        Glide.with(context.getApplicationContext()).load(defaultResId).transform(new GlideCircleTransform(context.getApplicationContext()))
                .into(imageView);
    }
    /**
     * 加载网络图片---圆角图片
     */
    public static void filletedCornerLoad(Context context, String url,int size, ImageView imageView) {
        Glide.with(context).load(url).transform(new GlideRoundedTransformation(context, size)).into(imageView);
    }

    /**
     * 加载网络图片，带监听,不做内存的缓存
     */
    public static void loadskipMemory(Context context, String imgUrl, ImageView imageView, RequestListener<String, GlideDrawable> listener) {
        Glide.with(context.getApplicationContext()).load(imgUrl).listener(listener).skipMemoryCache(true).into(imageView);
    }

    /**
     * 加载网络图片，带监听,默认内存和硬盘全部缓存
     */
    public static void load(Context context, String imgUrl, ImageView imageView, RequestListener<String, GlideDrawable> listener) {
        Glide.with(context.getApplicationContext()).load(imgUrl).listener(listener).into(imageView);
    }
    /**
     * 加载网络图片，带监听,默认内存和硬盘全部缓存
     */
    public static void loadTrain(Context context, String imgUrl, ImageView imageView, RequestListener<String, GlideDrawable> listener) {
        WindowManager wm = (WindowManager) context
                .getSystemService(Context.WINDOW_SERVICE);
        int width = wm.getDefaultDisplay().getWidth();
        int height = wm.getDefaultDisplay().getHeight();
        Glide.with(context.getApplicationContext()).load(imgUrl).override(width,height).listener(listener).into(imageView);
    }
    /**
     * 加载本地图片，带监听,默认内存和硬盘全部缓存
     */
    public static void loadLocalUrl(Context context, String imgUrl, ImageView imageView, RequestListener<String, GlideDrawable> listener) {
        Glide.with(context.getApplicationContext()).load("file://" + imgUrl).listener(listener).into(imageView);
    }


    /**
     * 下载图片
     */
    public static void downImage(final String url, final String path, final String ilename, final Context context) {
//        final String filename = new Md5FileNameGenerator().generate(url) + ".PNG";

        final String filename = System.currentTimeMillis() + ".PNG";
        if (new File(url + filename).exists()) {
            Toast.makeText(context.getApplicationContext(), "保存成功,路径：" + path + filename, Toast.LENGTH_LONG).show();
        } else {
            Glide.with(context.getApplicationContext()) // could be an issue!
                    .load(url).asBitmap()
                    .into(new SimpleTarget<Bitmap>() {
                        @Override
                        public void onResourceReady(final Bitmap bitmap, GlideAnimation glideAnimation) {
                            Thread thread = new Thread(new Runnable() {
                                @Override
                                public void run() {
                                    saveBitmap(bitmap, path, filename);
                                    scanPhotos(path + filename, context.getApplicationContext());
                                }
                            });
                            thread.start();
                            Toast.makeText(context.getApplicationContext(), "保存成功,路径：" + path + filename, Toast.LENGTH_LONG).show();
                        }
                    });

        }
    }

    public static void scanPhotos(String filePath, Context context) {
        Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
        Uri uri = Uri.fromFile(new File(filePath));
        intent.setData(uri);
        context.getApplicationContext().sendBroadcast(intent);
    }

    /**
     * 将Bitmap保存为本地图片
     *
     * @param bm
     * @param path     路径
     * @param filename 文件名
     * @return
     */
    public static boolean saveBitmap(Bitmap bm, String path, String filename) {
        File dir = new File(path);
        if (!dir.exists()) {
            dir.mkdir();
        }
        File f = new File(dir, filename);
        try {
            f.createNewFile();
            FileOutputStream out = new FileOutputStream(f);
            bm.compress(Bitmap.CompressFormat.PNG, 90, out);
            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
}
